{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Training models for pulmonary nodule detection on LUNA16 dataset"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In this tutorial you will learn how to train models on popular [LUNA16](http://luna16.grand-challenge.org) competition dataset (scans from [LIDC-IDRI])(https://wiki.cancerimagingarchive.net/display/Public/LIDC-IDRI).\n",
    "\n",
    "Notebook is divided into four parts:\n",
    "1. Preparation of dataset containing CT-scans crops\n",
    "2. Training a ready-made model from recommended RadIO model zoo, e.g. [**Keras3DUnet**](https://analysiscenter.github.io/radio/api/keras_3dunet.html)\n",
    "3. Training a popular model from dataset/models zoo, e.g. [**V-Net**](https://analysiscenter.github.io/dataset/api/dataset.models.tf.vnet.html)\n",
    "4. Integrating custom model with RadIO framework"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Before proceeding to the plan, we will make some standard imports:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import sys\n",
    "sys.path.append('../')\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Part I. Prepare dataset of crops"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Traininig a neural network on whole CT-scans is not yet practically approachable, as they weight too much (300-500mb+). Therefore using smaller 3D parts, crops, would be a natural way to tackle volumetric information. Cropping parts with/without nodules will also facilitate better sampling and allow to tune balance of positive/negative examples in batch more accurately. RadIO contains ready-made preprocessing pipeline which will create a dataset with crops. You may use LUNA16 challenge dataset in MetaImage format to run this tutorial."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Note**: You will also need **annotations.csv** file with annotation in format similar to file provided for the LUNA16 dataset."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import radio\n",
    "from radio import batchflow as bf\n",
    "from radio import CTImagesMaskedBatch as CTIMB\n",
    "\n",
    "# read annotation\n",
    "nodules = pd.read_csv('/data/MRT/luna/CSVFILES/annotations.csv')\n",
    "\n",
    "# create index and dataset\n",
    "lunaix = bf.FilesIndex(path='/data/MRT/luna/s*/*.mhd', no_ext=True)\n",
    "lunaset = bf.Dataset(index=lunaix, batch_class=CTIMB)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "If you need to split your dataset into train/test/validation parts, you can use `.split` method. For example, splitting dataset into 90% for train, 10% for test and 0% for validation will be:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "lunaset.split(0.9, shuffle=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now original dataset is divided into train and test parts:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(799, 89)"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(lunaset.train), len(lunaset.test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next, we need to write down preprocessing workflow. \n",
    "\n",
    "Function **split_dump** from `radio.pipelines` returns basic workflow, including normalizing [**Hounsfield Units**](https://en.wikipedia.org/wiki/Hounsfield_scale), resizing all scans to fixed scans and in at same time unifying its spacing to desired one. After preprocessing **split_dump** function samples smaller crops of desired shape **(32, 64, 64)** with and without cancer nodules. Workflow will also create masks based on nodules location and dump all components, e.g. `masks`, `images`, into fast [**blosc**](http://blosc.org/pages/blosc-in-depth/) format.\n",
    "\n",
    "Crops with cancer nodules will be dumped to `cancer_path` and crops without any nodules will be dumped to `non_cancer_path`. It allows managing balance of positive/negative examples in batch later during training.\n",
    "\n",
    "You may want to pass additioanl paramteres as `kwargs`: "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from radio.pipelines import split_dump\n",
    "\n",
    "SPACING = (1.7, 1.0, 1.0)  # spacing of scans after spacing unification\n",
    "SHAPE = (400, 512, 512)  # shape of scans after spacing unification\n",
    "PADDING = 'reflect'  # 'reflect' padding-mode produces the least amount of artefacts\n",
    "METHOD = 'pil-simd'  # robust resize-engine\n",
    "\n",
    "kwargs_default = dict(shape=SHAPE, spacing=SPACING, padding=PADDING, method=METHOD)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "crop_pipeline = split_dump(cancer_path='/data/lunaset_split/train/cancer/', \n",
    "                           non_cancer_path='/data/lunaset_split/train/ncancer/',\n",
    "                           nodules=nodules, fmt='raw', nodule_shape=(32, 64, 64),\n",
    "                           batch_size=20, **kwargs_default)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Pass dataset directly to pipeline and run it, for example for `lunaset.train` sub-dataset:\n",
    "\n",
    "(Note, it may take some time, so better grab a coffee)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "(lunaset.train >> crop_pipeline).run()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "You may want to prepare test part in similar way, but do not forget to change `cancer_path` and `non_cancer_path`. In this tutorial we will skip it."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Part II. Training a ready-to-use model implemented in Keras: 3D U-Net"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**RadIO** contains a small but growing zoo of models in Keras and Tensorflow. In this part you will perform training a 3D U-Net architecture for pulmonary nodule segmentation using dataset of CT-scans crops you prepared earlier."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "DIR_CANCER = '/data/lunaset_split_new/train/cancer/*'\n",
    "DIR_NCANCER = '/data/lunaset_split_new/train/ncancer/*'"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Similar to preprocessing, let's build a training pipeline. This time, you will need 2 datasets, one for crops with nodules and another without them, that's why they were dumped in different folders. Remeber, that masks and some other special information is also dumped, so it can be easily loaded on request."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "First of all, we create two indices and two datasets corresponding to them:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "cix = bf.FilesIndex(path=DIR_CANCER, dirs=True)\n",
    "ncix = bf.FilesIndex(path=DIR_NCANCER, dirs=True)\n",
    "\n",
    "cancerset = bf.Dataset(index=cix, batch_class=CTIMB)\n",
    "ncancerset = bf.Dataset(index=ncix, batch_class=CTIMB)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "How can we use both datasets in a same time during training? Package **dataset** allows to `merge` several pipelines into one requiring only specification of **batch_size** parameter for each of them. Say, we would want take 4 crops with nodules and 4 without them, in total batch_size of 8 crops of (32, 64, 64) size. Let's import a ready made pipeline **combine_crops** for this problem:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 167,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from radio.pipelines import combine_crops\n",
    "from utils import show_slices # function for plotting batch masks and images\n",
    "combine_pipeline = combine_crops(cancerset, ncancerset, batch_sizes=(4, 4))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 170,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Here we generate one batch with 4 cancer crops and 4 non-cancer crops\n",
    "batch = combine_pipeline.next_batch()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's look inside of generated batch. To do that we use `show_slices` function:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 171,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nx+wHsnfF55Lrz14Uz2XJnhfn4lq3bl0Us1NWvra4rtz27A9yTjluG3YbeR5QdiUfffTRKOb7jI+N\nr03eH/uDvLzcNqkcan1Bq/qv7gZuQgjRZ68vzWyImQ2t/Qzg9QAWA/gBgIuK1S4CcFNf1UkIIZpB\n/ZcQoi/oyydlHQBuLL4xdgCA/3X3W8zsPgDfNbNLADwG4O19WCchhGgG9V9CiF6nzwZl7r4KwMl1\nfr8NwGv6qh5CCNFT1H8JIfqCtpz7cteuXdEcgZybinNXpfI5sYvDOZHYM+L5J3l/zPr16xuWz/Vj\nyi4Rez+peTnZMeO5IMt5sJqBHSpuixScG4t9PHbEOF62bFkUcw64kSNHRvFxxx0XxdzWPP/ili1b\nojjlJ/LcnDyX5dixY6OYHb8nn3wyitmreuc739n186pVq6JlXHf27dg547biY2NfMTWvJ++P256P\nlefe5GuH78ty27JPJ4QQA5Eq5CkTQgghhHjZo0GZEEIIIUQF0KBMCCGEEKICtKVTduCBB2L8+PFd\nMc9XmPKW2CHj9Tm/E+em4lxU7MZw3jHOU8bbc/nsPZXry3Vjx4l9tVSuKG6LuXPnRvF5550Xxexo\ncdun4LZhuH5HH310FLNXxce7eXOcJuq+++6LYna8eG5Nbk928Njp47k1y64jsLeDx44fz3PKXtfb\n377ny3ycY43ziC1YsCCK8zyPYvYP+Vyw38bOGefn47bkY2M/j/MJsvPGbVtuu566i0II0Y7oSZkQ\nQgghRAXQoEwIIYQQogJoUCaEEEIIUQHa0inbvXt3lCOJ5/RjT4q9KvZ82OFKeVqcO4vzMfH27Blx\nfdjVYfen7PawR5Sat5Ph5WPGjIniRYsWRTE7ZWWXDwDmzZsXxVOmTGm4/5RTxR7TkUceGcXseHHu\nLT63nDuL/UF24tjbYueMr62Uc8bni+c95eNjp+ymm/bM2sPzgjLz58+PYp5Xk91Fbnt2vnguS85L\nxtc1X0t833CuMT7XnG+wXB8+z0IIMRDRkzIhhBBCiAqgQZkQQgghRAXQoEwIIYQQogK0pVM2aNCg\nyEdhh4vdGc7HxPmR2CnjvGap+Sa5fPa22HPi/E2c64pzdZWPlffFHlDKaeKYc03xPJ3sVPHcjuyQ\ncfncltzWPHck52E75ZRTonjx4sVRzK5Ram7JlFfFy9kx43xZXD7Dx8/twznreG7PO++8s+tnvu7Y\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f4cae2bccf8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "show_slices(batch, scan_indices=4, ns_slice=16, clims=[(0, 255), (0, 1)],\n",
    "            components=('images', 'masks'), grid=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next step is the model: import and desciption of configuration dict. Model requires specification of input crops and masks sizes (will be same) as well as Optimizer and Loss function; e.g. use Adam for training and Dice loss funciton for segmentation:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from radio.models import Keras3DUNet\n",
    "from radio.models.keras.losses import dice_loss\n",
    "\n",
    "unet_config = dict(\n",
    "    input_shape = (1, 32, 64, 64),\n",
    "    num_targets = 1,\n",
    "    loss= dice_loss\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "After that, let's add one more part to training pipeline specifying model and training params by chaining `.init_model` and `.train_model` pipeline methods:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from radio.batchflow import F\n",
    "\n",
    "train_unet_pipeline = (\n",
    "    combine_crops(cancerset, ncancerset, batch_sizes=(4, 4))\n",
    "    .init_model(\n",
    "        name='3dunet', model_class=Keras3DUNet,\n",
    "        config=unet_config, mode='static'\n",
    "    )\n",
    "    .train_model(\n",
    "        name='3dunet',\n",
    "        x=F(CTIMB.unpack, component='images', data_format='channels_first'),\n",
    "        y=F(CTIMB.unpack, component='masks', data_format='channels_first')\n",
    "    )\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here `train_model` employ custom **CTIMB.unpack** method that helps to unpack specific components from batch and put them into desired alias of keras network: `images` component goes to `x` and `masks` into `y`.\n",
    "\n",
    "If you want to try a keras network for classification, you may simply pass component for y's unpack to `classification_targets`. That way, unpack would transform masks into binary classification (`nodule` vs. `non-nodule`) target based on threshold of amount of cancer voxels inside the crop to label `nodule`. See [documentation](https://analysiscenter.github.io/radio/intro/models.html) for details."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Then, the moment of truth:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "train_unet_pipeline.run()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "After execution is finished, you may `.save` keras model:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "keras_unet = train_unet_pipeline.get_model_by_name('3dunet')\n",
    "keras_unet.save('/path/to/keras_3d_unet/weights')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "If you later would like to access it, that would be easy by adding `path` in `model_config` and redefining and running same pipeline again:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "unet_config.update({'path': '/path/to/keras_3d_unet/weights'})\n",
    "\n",
    "train_unet_pipeline = (\n",
    "    combine_crops(cancerset, ncancerset, batch_sizes=(4, 4))\n",
    "    .init_model(\n",
    "        name='3dunet', model_class=Keras3DUNet,\n",
    "        config=unet_config, mode='static'\n",
    "    )\n",
    "    .train_model(\n",
    "        name='3dunet',\n",
    "        x=F(CTIMB.unpack, component='images', data_format='channels_first'),\n",
    "        y=F(CTIMB.unpack, component='masks', data_format='channels_first')\n",
    "    )\n",
    ")\n",
    "\n",
    "train_unet_pipeline.run()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Note**: we have created a new pipeline instance to avoid model names collision when init_model method is called second time."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Part 3. Training a model from radio.dataset.models zoo: V-Net"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Dataset library used by RadIO contains a zoo of many popular model architecture in tensorflow. In this part you will learn to train V-Net (volumetric u-net) for same task with same preprocessing pipeline. All you need is to define config of dataset's v-net model:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using TensorFlow backend.\n"
     ]
    }
   ],
   "source": [
    "from radio.batchflow.models.tf import VNet\n",
    "# We use Tversky loss here cause it performs slightly better than dice\n",
    "from radio.models.tf.losses import tversky_loss\n",
    "import tensorflow as tf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "vnet_config = {\n",
    "    'inputs': dict(\n",
    "        images={'shape': (32, 64, 64, 1)},\n",
    "        labels={'name': 'targets', 'shape': (32, 64, 64, 1)}\n",
    "    ),\n",
    "    'loss': tversky_loss,\n",
    "    'optimizer': 'Adam',\n",
    "}\n",
    "vnet_config['input_block/inputs'] = 'images'\n",
    "vnet_config['head/layout'] = 'cna'\n",
    "vnet_config['head/activation'] = tf.nn.sigmoid\n",
    "vnet_config['head/kernel_size'] = 1\n",
    "vnet_config['head/num_classes'] = 1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Subpackage **dataset.models** has highly parametrized architectures that allow to perform experiments by combining different paramteres without changing model's code. It greatly facilitates clear and reproducible experiment settings.\n",
    "\n",
    "In example above you descibed configuration dictionary for V-Net model which will be trained on crops with Adam optimizer, tversky loss. Slight modifications are added to head of the network, last convolutional block would consist of convolution with (1, 1, 1) kernel, 1 filter, following batch normalisation layer and sigmoid activation function. See dataset [documentation](https://analysiscenter.github.io/dataset/intro/tf_models.html) for details."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from IPython.display import clear_output\n",
    "from radio.batchflow import V, F\n",
    "\n",
    "train_vnet_pipeline = (\n",
    "    combine_crops(cancerset, ncancerset, batch_sizes=(4, 4))\n",
    "    .init_variable('loss_history', init_on_each_run=list)\n",
    "    .init_variable('current_loss', 0)\n",
    "    .init_model(\n",
    "        name='vnet', model_class=VNet,\n",
    "        config=vnet_config, mode='static'\n",
    "    )\n",
    "    .train_model(\n",
    "        name='vnet', fetches='loss', save_to=V('current_loss'), mode='w',\n",
    "        feed_dict={'images': F(CTIMB.unpack, component='images'),\n",
    "                   'targets': F(CTIMB.unpack, component='masks')}\n",
    "    )\n",
    "    .print(\"Current loss:\")\n",
    "    .print(V('current_loss'))\n",
    "    .update_variable('loss_history', value=V('current_loss'), mode='a')\n",
    "    .call(lambda x: clear_output(wait=True))\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Current loss:\n",
      "-0.49989\n"
     ]
    }
   ],
   "source": [
    "train_vnet_pipeline.run()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's visualize loss changes through learning process:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x7facd83dba90>"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7facd833b470>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "loss_history = (\n",
    "    pd.Series(train_vnet_pipeline.get_variable('loss_history'))\n",
    "    .rolling(32)\n",
    "    .mean()\n",
    "    .transform(lambda x: -x)\n",
    ")\n",
    "\n",
    "plt.figure(figsize=(7, 5))\n",
    "loss_history.plot(grid=True)\n",
    "plt.xlabel('Iteration')\n",
    "plt.ylabel('Tversky loss')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Usually, it's quiet usefull to have a look on predictions:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 172,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "vnet_model = train_vnet_pipeline.get_model_by_name('vnet')\n",
    "predicted_masks = vnet_model.predict(feed_dict={'images': batch.unpack('images')})"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "True mask coupled with CT-crop looks like:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 173,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nx+wHsnfF55Lrz14Uz2XJnhfn4lq3bl0Us1NWvra4rtz27A9yTjluG3YbeR5QdiUfffTRKOb7jI+N\nr03eH/uDvLzcNqkcan1Bq/qv7gZuQgjRZ68vzWyImQ2t/Qzg9QAWA/gBgIuK1S4CcFNf1UkIIZpB\n/ZcQoi/oyydlHQBuLL4xdgCA/3X3W8zsPgDfNbNLADwG4O19WCchhGgG9V9CiF6nzwZl7r4KwMl1\nfr8NwGv6qh5CCNFT1H8JIfqCtpz7cteuXdEcgZybinNXpfI5sYvDOZHYM+L5J3l/zPr16xuWz/Vj\nyi4Rez+peTnZMeO5IMt5sJqBHSpuixScG4t9PHbEOF62bFkUcw64kSNHRvFxxx0XxdzWPP/ili1b\nojjlJ/LcnDyX5dixY6OYHb8nn3wyitmreuc739n186pVq6JlXHf27dg547biY2NfMTWvJ++P256P\nlefe5GuH78ty27JPJ4QQA5Eq5CkTQgghhHjZo0GZEEIIIUQF0KBMCCGEEKICtKVTduCBB2L8+PFd\nMc9XmPKW2CHj9Tm/E+em4lxU7MZw3jHOU8bbc/nsPZXry3Vjx4l9tVSuKG6LuXPnRvF5550Xxexo\ncdun4LZhuH5HH310FLNXxce7eXOcJuq+++6LYna8eG5Nbk928Njp47k1y64jsLeDx44fz3PKXtfb\n377ny3ycY43ziC1YsCCK8zyPYvYP+Vyw38bOGefn47bkY2M/j/MJsvPGbVtuu566i0II0Y7oSZkQ\nQgghRAXQoEwIIYQQogJoUCaEEEIIUQHa0inbvXt3lCOJ5/RjT4q9KvZ82OFKeVqcO4vzMfH27Blx\nfdjVYfen7PawR5Sat5Ph5WPGjIniRYsWRTE7ZWWXDwDmzZsXxVOmTGm4/5RTxR7TkUceGcXseHHu\nLT63nDuL/UF24tjbYueMr62Uc8bni+c95eNjp+ymm/bM2sPzgjLz58+PYp5Xk91Fbnt2vnguS85L\nxtc1X0t833CuMT7XnG+wXB8+z0IIMRDRkzIhhBBCiAqgQZkQQgghRAXQoEwIIYQQogK0pVM2aNCg\nyEdhh4vdGc7HxPmR2CnjvGap+Sa5fPa22HPi/E2c64pzdZWPlffFHlDKaeKYc03xPJ3sVPHcjuyQ\ncfncltzWPHck52E75ZRTonjx4sVRzK5Ram7JlFfFy9kx43xZXD7Dx8/twznreG7PO++8s+tnvu7Y\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f4cae210eb8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "show_slices(batch, scan_indices=4, ns_slice=16, clims=[(0, 255), (0, 1)],\n",
    "            components=('images', 'masks'), grid=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Below you can see predicted mask coupled with CT-crop:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 174,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nyK99+LULvwLj8jjm1zypaZz4NRK/fi3Xl+vOjB49umHd+DUQL+cUDVwXbmtenno9yuWnzh2/euZp\njVKvU/nVML+i4/qkzi1Pu7R9+/aG6/Pry87Ozoblcf3Lx5+aYou35WuF68Ll8fap15mpdCN8bfDy\n1HRk5fuI1xVCiIGInpQJIYQQQlQADcqEEEIIISqABmVCCCGEEBWgLZ0yM4u8L/aCmNTUQuzOsCvD\njhl7UilXhstjr4tTYLD7U57KZ+3atQ3XZbiu7DzxFFIpTyk1zROnA0lNrcPl8/ZcHy5v8uTJUczT\nHLGnxM4a+4SpNBGpc3fsscdG8TnnnBPFM2bMiOIrrrgiijltRbl9edqjlPvI54qvBT52vjb42Lgt\nU44ax5yOJDWNE+9PCCEGOnpSJoQQQghRATQoE0IIIYSoABqUCSGEEEJUgLZ1yspuEntC7Nawm8K5\nrdilSeXmYg+K3Rl2cXg5e0rs2rAXVZ7qJ5VXLDWl1JYtW6I4lfeMHSuuK/t6PC0Rl89xKlcWl8/n\nkj0pdtJ4eercct4x9rZSedo45mttyZIlUZy6dsoOW2r6L47Z+eK2TU0xxddaT6ew4rbjc8PXOdev\nfG2vW7cOQggx0NGTMiGEEEKICqBBmRBCCCFEBdCgTAghhBCiArSlU8ZzX7JLw/mP2HNi14XdGfaG\n2LXh+RRTrk0qzxnXt1FuMHaW2Pnq6OiIYnayeH3Oi8VzS7KXxP4eO2t87CmnjL0m3h+fi5SHxMu5\nfHbwUucuNeciXzsLFy6M4qVLl0bxiBEjonjz5s1RzMdfduh4GZ9Lbgu+blNuIx87b59yN5mU88bz\ngLIPuWHDhoblCyHEQENPyoQQQgghKoAGZUIIIYQQFaDPBmVmNsnMbjWzB81ssZldUvx+pJndbGbL\niv9HpMoSQoi+RP2XEKIv6EunbCeAD7r7fWY2FMC9ZnYzgHcBuMXdLzezywBcBuDSRgW9+OKL0bx9\nqTn62Oni+Qt5OeeDYi+L3Z3UnILjx49vWB67Qo0ct1ROtdTclOwB8bFw27F3xOVzW6XmW+RcVanj\n4bk5+VyzL8i+H9eHnTM+F1wfPr7Utcbb83LeX3leU2DP81Fuf24LLoth5yx1rfC1wY7Xtm3bopiP\nlZ2xlKvJbcPll88l+239QMv6LyG6I3VP3XLLLVH8jne8I4p76mHyfXXPPfdE8Zlnntmj8sS+02dP\n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\nTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f4cae1b19e8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "batch.masks = predicted_masks.reshape(-1, 64, 64)\n",
    "show_slices(batch, scan_indices=4, ns_slice=16, clims=[(0, 255), (0, 1)],\n",
    "            components=('images', 'masks'), grid=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "### Part 4. Writing custom tensorflow model compatible with the same pipeline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In this part you will see, how to train your own models using RadIO framework. The easiest way would be to write your model in tensorflow or keras and use `.import_model()` in pipeline. Let's implement a simple 3D convolutional encoder-decoder architecture via tensorflow."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "First of all, you need to keep in mind that your custom model must be compatible with `pipeline`'s model specific methods. An easy way to provide this would be to inherit `BaseModel` class and redefine its **`build`** method for building model's graph in tensorflow, **train** method as it will be used by pipeline's **.train_model** and **predict** method to be able to call pipeline's **.predict_model**. Additionaly, you can provide implementation for save and load methods. See documentation of [BaseModel](https://analysiscenter.github.io/dataset/api/dataset.models.html#dataset.models.BaseModel) to make sense of its possibilities."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import tensorflow as tf\n",
    "from radio.batchflow.models import BaseModel"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "class TFCustomModel(BaseModel):\n",
    "\n",
    "    def __init__(self, config=None, *args, **kwargs):\n",
    "        self.graph = tf.Graph()\n",
    "        with self.graph.as_default():\n",
    "            crop_shape = self.get('crop_shape', config=self.config, default=(32, 64, 64, 1))\n",
    "            self.images = tf.placeholder(shape=(None, *crop_shape), dtype=tf.float32)\n",
    "            self.masks = tf.placeholder(shape=(None, *crop_shape), dtype=tf.float32)\n",
    "\n",
    "        self.predictions = None\n",
    "        self.loss = None\n",
    "        self.train_step = None\n",
    "        self.sess = None\n",
    "\n",
    "        super().__init__(*args, **kwargs)\n",
    "    \n",
    "    def encoder_block(self, input_tensor, filters, name):\n",
    "        with tf.variable_scope(name):\n",
    "            x = tf.layers.conv3d(input_tensor, filters, (3, 3, 3), name='Conv_1',\n",
    "                                 padding='same', activation=tf.nn.relu)\n",
    "            x = tf.layers.conv3d(x, filters, (3, 3, 3), name='Conv_2',\n",
    "                                 padding='same', activation=tf.nn.relu)\n",
    "            x = tf.layers.max_pooling3d(x, pool_size=(2, 2, 2),\n",
    "                                        strides=(2, 2, 2), padding='same')\n",
    "        return x\n",
    "    \n",
    "    def decoder_block(self, input_tensor, filters, name):\n",
    "        with tf.variable_scope(name):\n",
    "            x = tf.layers.conv3d(input_tensor, filters, (3, 3, 3), name='Conv_1',\n",
    "                                 padding='same', activation=tf.nn.relu)\n",
    "            x = tf.layers.conv3d(x, filters, (3, 3, 3), name='Conv_2',\n",
    "                                 padding='same', activation=tf.nn.relu)\n",
    "            x = tf.layers.conv3d_transpose(x, filters, (2, 2, 2), strides=(2, 2, 2),\n",
    "                                           use_bias=False, padding='same')\n",
    "        return x\n",
    "        \n",
    "    def build(self, *args, **kwargs):\n",
    "        filters = self.get('filters', config=self.config, default=(32, 64, 128, 256))\n",
    "        with self.graph.as_default():\n",
    "            x = self.images\n",
    "            for i, f in enumerate(filters):\n",
    "                x = self.encoder_block(x, f, \"EncoderBlock_\" + str(i))\n",
    "            \n",
    "            for i, f in enumerate(filters[::-1]):\n",
    "                x = self.decoder_block(x, f, \"DecoderBlock_\" + str(i))\n",
    "\n",
    "            self.predictions = tf.layers.conv3d(x, 1, (1, 1, 1),\n",
    "                                                padding='same',\n",
    "                                                name='predictions')\n",
    "            \n",
    "            self.loss = tf.losses.sigmoid_cross_entropy(self.masks, self.predictions)\n",
    "            self.train_step = tf.train.AdamOptimizer().minimize(self.loss)\n",
    "            self.sess = tf.Session()\n",
    "            self.sess.run(tf.global_variables_initializer())\n",
    "    \n",
    "    def train(self, x, y): \n",
    "        self.sess.run(self.train_step, feed_dict={self.images: x, self.masks: y})\n",
    "    \n",
    "    def predict(self, x):\n",
    "        return self.sess.run(self.predictions, feed_dict={self.images: x})"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Then you can use `.import_model` just like that, and not forget to provide right arguments (from train method) into `.train_model`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from radio.batchflow import F\n",
    "import numpy as np\n",
    "\n",
    "custom_model = TFCustomModel(config={'crop_shape': (32, 64, 64, 1), 'filters': (32, 64, 128, 256)})\n",
    "\n",
    "train_custom_model_ppl = (\n",
    "    combine_crops(cancerset, ncancerset, batch_sizes=(4, 4))\n",
    "    .import_model(name='custom_model', source=custom_model)\n",
    "    .train_model(\n",
    "        name='custom_model',\n",
    "        x=F(CTIMB.unpack, component='images'),\n",
    "        y=F(CTIMB.unpack, component='masks')\n",
    "    )\n",
    ")\n",
    "\n",
    "train_custom_model_ppl.run()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "To conclude, in this tutorial you have learnt how to prepare dataset with CT-scans crops for training neural network,\n",
    "trained ready-to use models from **RadIO** and **dataset** and learnt how to integrate custom model with pipeline-specific model methods."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.6+"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
